'use strict';

module.exports = () => {
  return async (ctx, next) => {
    const requetsUrl = ctx.request.url;
    const roles = ctx.curAdminUser && ctx.curAdminUser.roles || [];
    const request = ctx.request.body;
    const controller = ctx.header.controller;
    ctx.logger.debug('校验权限，请求参数：', request);

    const isRights = await ctx.getCheckUserRights2(requetsUrl, controller);
    if (isRights) {
      if (controller) {
        const userRightsType = await ctx.getCurUserRightsTypeByController(controller);
        if (!userRightsType) {
          ctx.logger.info('无此操作权限，请联系管理员分配权限。');
          ctx.response.failByCode('0005', 403);
          return;
        }
        ctx.logger.debug(`该方法为： ${controller}  当前登陆用户：${ctx.curAdminUser.id}  该用户的用户权限设置类型为：${userRightsType}`);
        request.userRights = userRightsType;
        // delete request.controller;
        ctx.logger.debug('修改后的请求参数：', request);
      
      } else {
          ctx.logger.info('controller is null');
          ctx.response.failByCode('0001', 200, 'controller is null');
          return;
      }
    }
    // 判断是否有权限访问
    const isHave = roles.find(item => {
      return item == requetsUrl;
    });
    if (!isHave) {
      ctx.logger.info('无此操作权限，请联系管理员分配权限。');
      ctx.response.failByCode('0005', 403);
      return;
    }
    // 进入下一个中间件
    await next();
  };
};
